One-to-One এবং One-to-Many Relationship ম্যানেজমেন্ট

Java Technologies - আইবাটিস (iBATIS) - iBATIS এর Association এবং Collection Mapping
227

iBATIS (এখন MyBatis) হল একটি SQL mapping framework যা Java objects এবং SQL queries-এর মধ্যে সম্পর্ক স্থাপন করতে ব্যবহৃত হয়। iBATIS SQL queries লেখার জন্য পূর্ণ স্বাধীনতা প্রদান করে, তবে এতে ORM (Object-Relational Mapping) ফিচারগুলিও রয়েছে, যার মাধ্যমে one-to-one এবং one-to-many সম্পর্কগুলি সঠিকভাবে ম্যানেজ করা যায়।

iBATIS-এ one-to-one এবং one-to-many সম্পর্কগুলি manual SQL mappings এর মাধ্যমে করা হয়, এবং এই সম্পর্কগুলির জন্য nested selects বা joins ব্যবহার করা যেতে পারে। এই সম্পর্কগুলো iBATIS-এর XML configuration files এবং SQL mapping ফাইলের মাধ্যমে ম্যানেজ করা হয়।

এখানে, one-to-one এবং one-to-many সম্পর্কগুলি iBATIS-এ কিভাবে ম্যানেজ করা যায় তা দেখানো হলো।


1. One-to-One Relationship Management

One-to-one relationship তখন হয় যখন একটি entity অন্য একটি entity এর সাথে একে অপরের মধ্যে সম্পর্কিত থাকে। উদাহরণস্বরূপ, একজন Author একাধিক Book এর পরিবর্তে শুধুমাত্র একটি Book এর সাথে সম্পর্কিত হতে পারে।

One-to-One Relationship Example:

ধরা যাক, আমাদের একটি User entity এবং একটি Address entity রয়েছে, যেখানে User একটি Address এর সাথে সম্পর্কিত।

SQL Mapping File (User.xml):

<sqlMap namespace="User">
    <!-- Select query for retrieving user by ID with address -->
    <select id="getUserWithAddress" parameterClass="int" resultClass="User">
        SELECT u.id, u.name, u.email, a.id AS address_id, a.street, a.city
        FROM users u
        LEFT JOIN addresses a ON u.address_id = a.id
        WHERE u.id = #id#
    </select>
</sqlMap>

Java Entity Class (User.java):

public class User {
    private int id;
    private String name;
    private String email;
    private Address address; // One-to-One relationship with Address

    // Getters and setters
}

Java Entity Class (Address.java):

public class Address {
    private int id;
    private String street;
    private String city;

    // Getters and setters
}

Java Code to Fetch User with Address (Main.java):

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

public class Main {
    public static void main(String[] args) {
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder()
                .build(Main.class.getResourceAsStream("/SqlMapConfig.xml"));

        try (SqlSession session = sqlSessionFactory.openSession()) {
            // Fetch user with address
            User user = session.selectOne("User.getUserWithAddress", 1);
            System.out.println("User Name: " + user.getName());
            System.out.println("User Address: " + user.getAddress().getStreet());
        }
    }
}

ব্যাখ্যা:

  • getUserWithAddress SQL কুয়েরি ব্যবহার করা হচ্ছে যা users টেবিল এবং addresses টেবিলের মধ্যে LEFT JOIN করে User এবং Address এর মধ্যে সম্পর্ক তৈরি করেছে।
  • User ক্লাসে একটি Address অবজেক্ট অন্তর্ভুক্ত রয়েছে, যা one-to-one relationship নির্দেশ করে।
  • Main.java এ, session.selectOne("User.getUserWithAddress", 1) ব্যবহার করে User এবং Address একই সাথে রিটার্ন করা হচ্ছে।

2. One-to-Many Relationship Management

One-to-many relationship তখন হয় যখন একটি entity অন্য একাধিক entity এর সাথে সম্পর্কিত থাকে। উদাহরণস্বরূপ, একজন Author একাধিক Book এর সাথে সম্পর্কিত হতে পারে।

One-to-Many Relationship Example:

ধরা যাক, আমাদের একটি Author entity এবং একটি Book entity রয়েছে, যেখানে Author এর একাধিক Book থাকতে পারে।

SQL Mapping File (Author.xml):

<sqlMap namespace="Author">
    <!-- Select query for retrieving an author with books -->
    <select id="getAuthorWithBooks" parameterClass="int" resultClass="Author">
        SELECT a.id, a.name, b.id AS book_id, b.title
        FROM authors a
        LEFT JOIN books b ON a.id = b.author_id
        WHERE a.id = #id#
    </select>
</sqlMap>

Java Entity Class (Author.java):

import java.util.List;

public class Author {
    private int id;
    private String name;
    private List<Book> books; // One-to-Many relationship with Book

    // Getters and setters
}

Java Entity Class (Book.java):

public class Book {
    private int id;
    private String title;
    private int authorId; // Foreign key to Author

    // Getters and setters
}

Java Code to Fetch Author with Books (Main.java):

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.util.List;

public class Main {
    public static void main(String[] args) {
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder()
                .build(Main.class.getResourceAsStream("/SqlMapConfig.xml"));

        try (SqlSession session = sqlSessionFactory.openSession()) {
            // Fetch author with books
            Author author = session.selectOne("Author.getAuthorWithBooks", 1);
            System.out.println("Author Name: " + author.getName());
            List<Book> books = author.getBooks();
            for (Book book : books) {
                System.out.println("Book Title: " + book.getTitle());
            }
        }
    }
}

ব্যাখ্যা:

  • getAuthorWithBooks SQL কুয়েরি ব্যবহার করা হচ্ছে যা authors এবং books টেবিলগুলির মধ্যে LEFT JOIN করে একাধিক Book রিটার্ন করছে, যা Author এর সাথে সম্পর্কিত।
  • Author ক্লাসে একটি List রয়েছে, যা one-to-many relationship নির্দেশ করে।
  • Main.java এ, session.selectOne("Author.getAuthorWithBooks", 1) ব্যবহার করে Author এবং তার Books রিটার্ন করা হচ্ছে।

3. iBATIS-এর One-to-One এবং One-to-Many Relationship ম্যানেজমেন্টে কিছু গুরুত্বপূর্ণ পয়েন্ট

  • Joins: iBATIS-এ one-to-one এবং one-to-many সম্পর্কের জন্য আপনি সাধারণত SQL joins ব্যবহার করবেন, যেমন LEFT JOIN, INNER JOIN, ইত্যাদি, যা সম্পর্কিত টেবিলগুলির মধ্যে ডেটা সংগ্রহ করতে সহায়ক।
  • Result Mapping: iBATIS-এ, resultClass এবং parameterClass ব্যবহৃত হয় SQL query-এর ফলাফল Java objects-এর মধ্যে ম্যাপ করতে। একাধিক রেকর্ডের জন্য List<T> বা Set<T> ব্যবহার করা হয় যেখানে one-to-many সম্পর্ক গঠিত হয়।
  • Lazy Loading: iBATIS-এ lazy loading কনফিগারেশন সমর্থন করে, তবে এটি কাস্টমাইজড SQL কোডের মাধ্যমে অর্জন করতে হয়। উদাহরণস্বরূপ, সম্পর্কিত entity (যেমন Book list) শুধুমাত্র প্রয়োজন হলে লোড হতে পারে।
  • Manual SQL Management: iBATIS-এ আপনি SQL কোডের উপর পূর্ণ নিয়ন্ত্রণ পাবেন, তবে এই কারণে কোডটি কিছুটা বেশি জটিল হতে পারে। iBATIS আপনাকে manual SQL writing এবং parameterized queries ব্যবহার করার স্বাধীনতা দেয়।

iBATIS (MyBatis) এ one-to-one এবং one-to-many সম্পর্কের ম্যানেজমেন্ট করা সম্ভব SQL mapping ফাইল এবং custom SQL কুয়েরি ব্যবহার করে। iBATIS আপনাকে SQL queries এবং Java objects এর মধ্যে সম্পর্ক স্থাপনে পূর্ণ নিয়ন্ত্রণ দেয়, যেখানে joins ব্যবহার করে সম্পর্কিত entities রিটার্ন করা হয় এবং parameterized queries দ্বারা কার্যকরী ডেটাবেস অপারেশন পরিচালনা করা হয়।

one-to-one সম্পর্কের ক্ষেত্রে একাধিক JOIN অপারেশন ব্যবহার করা হয়, যেখানে one-to-many সম্পর্কের ক্ষেত্রে LIST বা SET ব্যবহার করা হয় যাতে একাধিক related entities রিটার্ন করা যায়।

Content added By
Promotion
NEW SATT AI এখন আপনাকে সাহায্য করতে পারে।

Are you sure to start over?

Loading...